package foundation.SurModel.rndForest.sample;

import java.util.ArrayList;
import java.util.List;


public class PerfLearnTblItem {
	// 处理器速度、组件部署和组件选择的起始下标
	private static ArrayList<Integer> strtIdxs = new ArrayList<Integer>();
	// 处理器速度为float类；服务器名为编号；组件选择中组件名为编号
	private List<StringBuffer> mlDFcodes = new ArrayList<StringBuffer>();
	private int actualminUtilProcNo = -1;// 实际最低使用率处理器的编号
	private int actualmaxUtilProcNo = -1;// 实际最高使用率处理器的编号
	private float actualResTime = -1f;// 实际响应时间

	int predictMinUtilProcNo = -1;// 预测的最低使用率处理器的编
	int predictMaxUtilProcNo = -1;// 预测的最高使用率处理器的编号
	float predictResTime = -1f;// 预测的响应时间
	
	private static List<String> attrNames=new ArrayList<String>();

	public static List<String> getAttrs() {
		if(attrNames.size()==0){
			attrNames = new ArrayList<String>();
			for(int i=0;i<strtIdxs.get(strtIdxs.size()-1)+2;i++){
				attrNames.add("Column"+(i+1));
			}
		}
		return attrNames;
	}

	/**
	 * 
	 * @param mdlTypeNm:模型类型名（最大使用率处理器、最小使用率处理器和响应时间）
	 * @return
	 */
	public ArrayList<Double> toDblList(String mdlTypeNm) {
		ArrayList<Double> data = new ArrayList<Double>();
		for(int i=0;i<getMlDFcodes().size();i++){
			data.add(Double.parseDouble(getMlDFcodes().get(i).toString()));
		}
		switch(mdlTypeNm){
		case "trainMinProUtil" :
			data.add((double)getActualminUtilProcNo());
			break;
		case "trainMaxProUtil" :
			data.add((double)getActualmaxUtilProcNo());
			break;
		case "trainRest" :
			data.add((double)getActualresTime());
			
		default:
			
		}
		return data;
	}
	
	public List<StringBuffer> getMlDFcodes() {
		return mlDFcodes;
	}

	public void setMlDFcodes(List<StringBuffer> mlDFcodes) {
		this.mlDFcodes = mlDFcodes;
	}

	public int getActualminUtilProcNo() {
		return actualminUtilProcNo;
	}

	public void setActualminUtilProcNo(int actualminUtilProcNo) {
		this.actualminUtilProcNo = actualminUtilProcNo;
	}

	public int getActualmaxUtilProcNo() {
		return actualmaxUtilProcNo;
	}

	public void setActualmaxUtilProcNo(int actualmaxUtilProcNo) {
		this.actualmaxUtilProcNo = actualmaxUtilProcNo;
	}

	public float getActualresTime() {
		return actualResTime;
	}

	public void setActualresTime(float actualresTime) {
		this.actualResTime = actualresTime;
	}

	public int getPredictMinUtilProcNo() {
		return predictMinUtilProcNo;
	}

	public void setPredictMinUtilProcNo(int predictMinUtilProcNo) {
		this.predictMinUtilProcNo = predictMinUtilProcNo;
	}

	public int getPredictMaxUtilProcNo() {
		return predictMaxUtilProcNo;
	}

	public void setPredictMaxUtilProcNo(int predictMaxUtilProcNo) {
		this.predictMaxUtilProcNo = predictMaxUtilProcNo;
	}

	public float getPredictResTime() {
		return predictResTime;
	}

	public void setPredictResTime(float predictResTime) {
		this.predictResTime = predictResTime;
	}

	public static ArrayList<Integer> getStrtIdxs() {
		return strtIdxs;
	}

	public static void setStrtIdxs(ArrayList<Integer> strtIdxs) {
		PerfLearnTblItem.strtIdxs = strtIdxs;
	}

}
